86d9837f2461877fb86c4b2292009d381323ceb2,library/src/com/google/maps/android/heatmaps/HeatmapUtil.java,HeatmapUtil,interpolateColor,#number#number#number#,308
Before Change
private static int interpolateColor(int color1, int color2, float ratio) {
// Interpolate using calculated ratio
double red = (Color.red(color2) - Color.red(color1)) * ratio + Color.red(color1);
double green = (Color.green(color2) - Color.green(color1)) * ratio + Color.green(color1);
double blue = (Color.blue(color2) - Color.blue(color1)) * ratio + Color.blue(color1);
double alpha = (Color.alpha(color2) - Color.alpha(color1)) * ratio + Color.alpha(color1);
return Color.argb((int) alpha, (int) red, (int) green, (int) blue);
After Change
int alpha = (int) ((Color.alpha(color2) - Color.alpha(color1)) * ratio + Color.alpha(color1));
float[] hsv1 = new float[3];
Color.RGBToHSV(Color.red(color1), Color.green(color1), Color.blue(color1), hsv1);
float[] hsv2 = new float[3];
Color.RGBToHSV(Color.red(color2), Color.green(color2), Color.blue(color2), hsv2);
// adjust so that the shortest path on the color wheel will be taken
if (hsv1[0] - hsv2[0] > 180) {
hsv2[0] += 360;
} else if (hsv2[0] - hsv1[0] > 180) {
hsv1[0] += 360;
}
// Interpolate using calculated ratio
float[] result = new float[3];
for (int i = 0; i < 3; i++) {
result[i] = (hsv2[i] - hsv1[i]) * (ratio) + hsv1[i];
}
return Color.HSVToColor(alpha, result);